/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.etrs.formathlon.vue.jsf.utils;

import java.io.Serializable;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import net.etrs.formathlon.control.security.LoginControler;
import net.etrs.formathlon.vue.exception.VueException;

/**
 * Classe fournissant les fonctionnalités de base à un managedBean.
 * @author OPIF
 */
public class GeneralBean implements Serializable {
    
    /**
     * Affiche un message d'erreur dans le growl
     * @param ex 
     */
    public void displayErreur(VueException ex){
        Logger.getLogger(GeneralBean.class.getCanonicalName()).log(Level.SEVERE, null, "Erreur : "+ex.getMessage());
        FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), ex.getMessage());  
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    }
    
    /**
     * Affiche un message d'alerte dans le growl
     * @param message 
     */
    public void displayAlert(String message){
        Logger.getLogger(GeneralBean.class.getCanonicalName()).log(Level.WARNING, null, "Alerte : "+message);
        FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_WARN, message,  message);  
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    }
    
    /**
     * Affiche un message d'information dans le growl
     * @param message 
     */
    public void displayMessage(String message){
        Logger.getLogger(GeneralBean.class.getCanonicalName()).log(Level.INFO, null, "Alerte : "+message);
        FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, message,  message);  
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    }
    
    /**
     * Affiche le message à partir du bundle.
     * @param cle
     * @return 
     */
    public String getMessage(String cle){
        ResourceBundle bundle = ResourceBundle.getBundle(
                "net.etrs.formathlon.vue.jsf.bundle.message",
                FacesContext.getCurrentInstance().getViewRoot().getLocale());
        return bundle.getString(cle);
    }
    
    /**
     * 
     * @return Le bean facadeAccessorBean
     */
    public FacadeAccessorBean getFacadeAccessorBean(){
        return getBean("facadeAccessorBean");
    }
    
    /**
     * 
     * @return le bean loginControler
     */
    public LoginControler getLoginControler(){
        return getBean("loginControler");
    }
    
    /**
     * 
     * @return le bean popupBean
     */
    public PopupBean getPopupBean(){
        return getBean("popupBean");
    }
    
    /**
     * 
     * @return le bean confirmationBean
     */
    public ConfirmationBean getConfirmationBean(){
        return getBean("confirmationBean");
    }
    
    /**
     * Methode de recherche d'un bean dans le context JSF.
     * @param <T>
     * @param beanName
     * @return le bean dont le nom est en paramètre.
     */
    private <T> T getBean(String beanName) {
        FacesContext context = FacesContext.getCurrentInstance();
        return (T) context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
    }

}
